# -*- coding: utf-8 -*-
"""
LLM Backend LangChain 主包

这是基于LangChain框架构建的大语言模型后端系统的核心包。
该系统提供了完整的LLM应用开发框架，包括：

核心功能模块：
1. core/ - 核心组件
   - llm/: LLM客户端实现（Ollama、OpenAI等）
   - retrieval/: 检索系统（混合检索、向量检索）
   - embeddings/: 嵌入模型管理

2. chains/ - 处理链
   - qa_chain.py: 问答处理链
   - chat_chain.py: 对话处理链
   - retrieval_chain.py: 检索增强生成链

3. data/ - 数据管理
   - storage/: 数据存储（QA数据、向量数据库）
   - loaders/: 数据加载器
   - processors/: 数据预处理

4. utils/ - 工具模块
   - logger.py: 日志系统
   - helpers.py: 辅助函数
   - validators.py: 数据验证

系统特性：
- 模块化设计：各组件独立可测试
- 可扩展架构：支持多种LLM和检索方式
- 类型安全：使用Python类型提示
- 异步支持：支持高并发处理
- 日志完善：详细的运行日志
- 错误处理：完善的异常处理机制

技术栈：
- LangChain: LLM应用开发框架
- Ollama: 本地LLM服务
- FAISS: 向量检索引擎
- Pydantic: 数据验证
- Loguru: 日志管理

使用示例：
    >>> from src.core.llm.ollama_client import OllamaClient
    >>> from src.core.retrieval.hybrid_retriever import HybridRetriever
    >>> from src.chains.qa_chain import QAChain
    >>> 
    >>> # 初始化组件
    >>> llm = OllamaClient()
    >>> retriever = HybridRetriever(qa_data)
    >>> qa_chain = QAChain(llm, retriever)
    >>> 
    >>> # 执行问答
    >>> answer = qa_chain.run("你的问题")
    >>> print(answer)

版本信息：
    当前版本专注于基础功能实现和稳定性，
    后续版本将添加更多高级功能。

Note:
    - 确保所有依赖包已正确安装
    - 配置文件需要根据环境调整
    - 生产环境建议使用Docker部署
"""

# 版本信息
__version__ = "1.0.0"
__author__ = "gaoyu"
__email__ = "your.email@example.com"
__description__ = "基于LangChain的大语言模型后端系统"

# 包级别的导入
# 这些是最常用的类和函数，可以直接从包根目录导入
try:
    from .core.llm.base import BaseLLM
    from .core.llm.ollama_client import OllamaClient
    from .core.retrieval.hybrid_retriever import HybridRetriever
    from .utils.logger import setup_logger, get_logger
    
    # 定义公共API
    __all__ = [
        "BaseLLM",
        "OllamaClient", 
        "HybridRetriever",
        "setup_logger",
        "get_logger",
        "__version__",
        "__author__",
        "__description__"
    ]
    
except ImportError as e:
    # 如果导入失败，记录错误但不阻止包的加载
    import warnings
    warnings.warn(f"部分模块导入失败: {e}", ImportWarning)
    
    # 最小化的公共API
    __all__ = [
        "__version__",
        "__author__", 
        "__description__"
    ]


def get_version() -> str:
    """
    获取包版本号
    
    Returns:
        str: 版本号字符串
        
    Examples:
        >>> from src import get_version
        >>> print(get_version())
        1.0.0
    """
    return __version__


def get_package_info() -> dict:
    """
    获取包的详细信息
    
    Returns:
        dict: 包含版本、作者、描述等信息的字典
        
    Examples:
        >>> from src import get_package_info
        >>> info = get_package_info()
        >>> print(info['version'])
        1.0.0
    """
    return {
        "name": "llm_backend_langchain",
        "version": __version__,
        "author": __author__,
        "description": __description__,
        "python_requires": ">=3.8"
    }